Open
Conversation
…2131) * fix(visualiser): improve icon and label spacing in nodes Add conditional bottom margins to node icons (mb-2 in full mode, mb-1 in simple mode) and increase label margins from mb-4 to mb-6 for longer labels (Channel, Command, Service, Data Product) to prevent overlap with rotated text in full mode. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * chore: setup language-server and playground packages for beta release - Rename @eventcatalog/ec-language-server to @eventcatalog/language-server - Add language-server and visualiser to CI/CD packaging workflow - Configure changesets to ignore dsl-playground (private package) - Create beta changeset for language-server 0.1.0 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * fix(language-server): add vitest config to resolve .js to .ts imports The Langium-generated module.ts imports grammar.js (ESM convention), but vitest needs explicit extension resolution to find the .ts source. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(language-server): use vite plugin to resolve .js to .ts imports Replace naive resolve.extensions with a proper Vite plugin that rewrites .js imports to .ts for all files in the language-server package. Handles all Langium-generated ESM imports without needing explicit aliases. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * chore: add changeset for visualiser node redesign Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(playground): remove build scripts from private package The playground is private and doesn't need to build in CI. Removing build:bin prevents Turbo from trying to build it during test:ci, which was failing because the visualiser dist/styles.css wasn't available yet. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(sdk): use separate test fixture dir for resources test resources.test.ts and users.test.ts both used catalog-users/ as their test fixture directory, causing a race condition when vitest runs them in parallel - one test's beforeEach would delete the other's fixtures. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(language-server): resolve .js to .ts paths relative to importer The plugin was returning relative paths which Vite resolved from root / instead of from the importing file. Use path.resolve with the importer's directory to produce correct absolute paths. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Create fuzzy-ghosts-chew.md * Create proud-crabs-know.md * fix(visualiser): restore Tailwind utilities in built CSS Re-add tailwindcss/utilities import that was removed in 7d0203c. The removal stripped all utility classes (flex, rounded, shadow, etc.) from the built CSS, leaving visualiser nodes unstyled in core. To prevent the original .hidden class conflict with the Astro header, a PostCSS plugin now strips the bare .hidden rule from output and the DownloadButton uses a custom ec-download-btn class instead. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat(visualiser, playground, language-server): node redesign, DSL examples, and completion improvements Redesign visualiser node components with improved icon/label spacing, consistent padding, and better visual hierarchy. Add DSL example templates to playground and enhance language-server completions. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(language-server): resolve visualizer refs by version and use versioned output paths - Key topLevelDefs by name@version for exact version lookups in graph builder - Use versioned paths (name/versioned/x.y.z/index.md) in compiler to prevent multi-version collisions - Remove invalid CommonJS require export from ESM-only package Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(language-server): resolve bare refs to latest version using semver Per the DSL spec, unversioned references resolve to the latest version. Previously, resolveNodeId and topLevelDefs used insertion order which could bind bare refs to older versions. Now uses semver.compare to deterministically pick the highest version. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(language-server): infer flow ref types from nested domain definitions inferTypeFromCatalog now uses topLevelDefs (which includes nested services/containers/channels inside domains) instead of scanning only program.definitions. Previously, flow refs to nested resources would fall back to "step" type instead of the correct type. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(language-server): preserve declared message type for data-product edges Data-product inputs/outputs have an explicit type (event/command/query) in the DSL, but fallback node creation was hardcoding "event". Now uses inp.type and out.type so command/query inputs/outputs get the correct node type in the graph. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(language-server): add routes-to edges for all receive channels The dedupe check for message→channel routes-to edges was checking if the message had any routes-to edge, causing only the first channel in a multi-channel receives clause to get an edge. Now checks against the specific channel ID so all channels get their routes-to edges. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(language-server): avoid langium generate race in CI build The `build` script ran `langium generate && tsc` redundantly since `build:bin` (which runs first via turbo) already does the same. When turbo ran both `build` and `test:ci` concurrently, the second `langium generate` overwrote src/generated files while vitest was loading them, causing ERR_MODULE_NOT_FOUND for grammar.ts. Changed `build` to just `tsc` since `build:bin` already handles code generation. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
* perf(ui): defer search/sidebar hydration on initial load * Create brown-mirrors-teach.md --------- Co-authored-by: Thor <thor@Thors-MacBook-Pro.local> Co-authored-by: David Boyne <boyneyy123@gmail.com>
* perf(search): load search index on first open * Create good-laws-burn.md --------- Co-authored-by: Thor <thor@Thors-MacBook-Pro.local> Co-authored-by: David Boyne <boyneyy123@gmail.com>
* perf(search): compact search index payload for faster transfers * Create serious-years-sin.md --------- Co-authored-by: Thor <thor@Thors-MacBook-Pro.local> Co-authored-by: David Boyne <boyneyy123@gmail.com>
* fix(core): resolve astro check type errors - Unify CatalogConfig with canonical Config type instead of maintaining a separate incomplete definition missing logo, landingPage, etc. - Add missing allowAnyEnvInSpecHeaders to Config asyncAPI field - Fix SearchModal favorite fallback object to include summary property - Fix SearchDataLoader window.setTimeout narrowing to never Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Create many-actors-jump.md * chore: disable Vercel preview deployments Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…erns (#2152) Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
* fix(ui): prevent theme toggle hydration mismatch * Create sharp-coins-promise.md --------- Co-authored-by: Thor <thor@Thors-MacBook-Pro.local> Co-authored-by: David Boyne <boyneyy123@gmail.com>
* feat(core): inject full catalog api route only when enabled * Create tall-donkeys-rule.md --------- Co-authored-by: Thor <thor@Thors-MacBook-Pro.local> Co-authored-by: David Boyne <boyneyy123@gmail.com>
Co-authored-by: Thor <thor@Thors-MacBook-Pro.local>
* perf(visualiser): skip visualiser route generation when disabled * Create witty-vans-cry.md --------- Co-authored-by: Thor <thor@Thors-MacBook-Pro.local> Co-authored-by: David Boyne <boyneyy123@gmail.com>
* perf(dev): prewarm first request after astro startup * Create brave-falcons-march.md --------- Co-authored-by: Thor <thor@Thors-MacBook-Pro.local> Co-authored-by: David Boyne <boyneyy123@gmail.com>
* fix(visualiser): make focus mode modal self-styled * Create clever-lions-occur.md --------- Co-authored-by: Thor <thor@Thors-MacBook-Pro.local> Co-authored-by: David Boyne <boyneyy123@gmail.com>
* updated asto versions * Create afraid-mirrors-enjoy.md
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* fix(core): remove negated glob patterns from content.config.ts Negated glob entries (!**/dist/**) in Astro's glob loader pattern arrays break content collection resolution, causing InvalidContentEntryDataError on fresh catalogs. This was introduced in 3.14.0. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * fix: format language-server CHANGELOG.md Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* feat(cli): add export command for DSL (.ec) format Add CLI export command supporting single resource, bulk, and full catalog export to EventCatalog DSL. Features include hydration of dependencies, grouped output with section comments, visualizer blocks, plural resource names, and playground integration. Fix getServices to ignore nested channels, containers, data-products, data-stores, and flows. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Create six-dancers-yell.md --------- Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* perf(sdk): add in-memory file index cache for faster catalog lookups Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * Update fast-clouds-race.md * fix(sdk): preserve message-type precedence and fix windows path parsing Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…dges (#2168) Remove direct message → channel edges when an indirect path already exists through channel routing chains. Simplify user/team DSL spec by removing owns statement. Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: thorthelegend99 <thorthelegend99@users.noreply.github.com>
Remove CSS import that breaks server-side rendering, add proper type assertion for lazy-loaded component, and export NodeGraphProps type. Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* fix(core): replace better-sqlite3 with sql.js to remove native compilation dependency Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * fix(core): escape LIKE wildcards in field search queries Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* fix(core): handle array type values in JSON Schema field extraction
JSON Schema allows array syntax for nullable fields (e.g. "type": ["string", "null"]).
The field extractor passed these arrays through as-is, which SQLite stored as blobs.
sql.js then returned Uint8Array values that React cannot render, crashing the fields
explorer page. Array types are now joined as pipe-separated strings (e.g. "string | null").
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* fix(core): recurse into nullable object and array types in field extractor
JSON Schema nullable objects ("type": ["object", "null"]) and nullable arrays
("type": ["array", "null"]) were not recursing into nested properties or items
because the recursion checks compared prop.type directly with === which fails
for array values. Now normalises the type to a list before checking.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* fix(core): sort array type values before joining to avoid false conflicts
Schemas with equivalent nullable types in different order (e.g. ["string", "null"]
vs ["null", "string"]) were stored as different strings, causing false type conflict
detection. Sorting the array alphabetically before joining ensures consistent output.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* fix(core): cap field path column width and add hover tooltip
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* chore(core): clarify licensing boundaries and protect enterprise code - Add root MIT LICENSE file with enterprise carve-out - Add EventCatalog Commercial License to enterprise directory - Move paid feature flags from utils/feature.ts to enterprise/feature.ts - Move schema API routes, custom docs routes, and resource-docs into enterprise - Move eventcatalog-features integration into enterprise - Add license headers to all enterprise source files - Fix package.json license fields across all packages - Add title attribute to sidebar items for long text hover - Add example ADR resource docs for E-Commerce domain Closes #2387 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(core): update schema API test imports to new enterprise paths Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* feat(sdk): add entities, containers, and flows to dumpCatalog Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * update README --------- Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* fix(core): handle circular refs in asyncapi spec rendering The AsyncAPI parser resolves $ref pointers creating circular object references with oneOf/allOf discriminator patterns. Astro's define:vars calls JSON.stringify internally which crashes on these cycles. Add safeStringify to break circular refs before serialization. Refs: event-catalog/generators#364 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * fix(core): track ancestors not all-seen objects for cycle detection Use a recursive deep-copy with ancestor tracking instead of a WeakSet of all-ever-seen objects. This preserves shared (non-circular) refs while still breaking true cycles from oneOf/allOf discriminator patterns. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
- Add flows to Service and Domain interfaces - Add deliveryGuarantee, detailsPanel.parameters, and detailsPanel.attachments to Channel - Align SDK types with content.config.ts schema definitions Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* docs: add breaking schema change detection implementation plan Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: add .worktrees/ to .gitignore Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat(breaking-changes): scaffold package * feat(breaking-changes): json schema differ with tests Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(breaking-changes): breaking change rules per strategy with tests * feat(breaking-changes): integration tests for public API * feat(cli): add schema_breaking_change trigger type and BreakingSchemaChange Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(cli): parse compatibility strategy from governance.yaml Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(cli): evaluate schema_breaking_change governance rules Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(cli): enrich breaking schema changes with actual diff results Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(cli): schema_breaking_change webhook payload with CloudEvents envelope Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * chore: format code Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(breaking-changes): detect root type changes and implicit nested objects - Detect root-level type changes (e.g., object → array) - Recurse into nested schemas that have properties/required but no explicit type Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(cli): validate compatibility strategy and narrow catch scope - Validate strategy against BACKWARD/FORWARD/FULL/NONE on config load - Narrow try/catch to only JSON.parse so detectBreakingChanges errors propagate Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: remove implementation plan from repo Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: add changeset for breaking schema change detection Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Motivation
(Write your motivation here.)